6.1 任务描述

前置任务:C4-005

业务模块:数据库

使用SQLiteOpenHelper。

任务类型:按步骤操作

6.2 详细实现步骤

为方便对数据进行操作,数据库操作使用了SQLiteOpenHelper。首先从SQLiteOpenHelper派生了DatabaseHelpler类,然后重写了该类的OnCreate()方法和onUpgrade()方法。在OnCrete()方法中创建数据库中的各表,在onUpgrade()中删除旧表,然后调用OnCreate()再次创建新表。

首先生成DatabaseHelper类,如下所示:

图 17 生成DatabaseHelper类

然后为该类添加重载方法。在类名上单击右键,依次选择菜单“generate…”、“Overide methods…”,也可以依次单击菜单“Code”、““Overide methods…”,Android Studio弹出“Select Methods to Override。Implement”对话框,如下所示。

图 18 实现方法

同上类似,再次在类名上单击右键,依次选择菜单“generate…”、“Constructor”,生成构造函数,为该类添加构造函数。

图 19 构建函数

然后修改代码如下:

package cn.edu.bistu.cs.se.accountbook;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by hbs on 2017-11-27.
 */

public class DatabaseHelpler extends SQLiteOpenHelper {
    public static final String DATABASE_NAME="myDatabase";
    public static final int DATABASE_VERSION=5;

    //支出类型表
    private static final String CREATE_TABLE_EXPENDITURE_TYPE="CREATE TABLE " + ExpenditureType.TableAttr.TABLE_NAME + " (" +
            ExpenditureType.TableAttr._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
            ExpenditureType.TableAttr.COLUMN_TYPE_NAME + " TEXT" + "," +
            ExpenditureType.TableAttr.COLUMN_NOTE + " TEXT"  + " )";


    //支出表
    private static final String CREATE_TABLE_EXPENDITURE="CREATE TABLE " + Expenditure.TableAttr.TABLE_NAME + " (" +
            Expenditure.TableAttr._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
            Expenditure.TableAttr.COLUMN_ACCOUNT_DATE + " TEXT" + "," +
            Expenditure.TableAttr.COLUMN_FK_TYPE + " INTEGER" + "," +
            Expenditure.TableAttr.COLUMN_AMOUNT + " INTEGER"  + " )";

    //收入类型表
    private static final String CREATE_TABLE_EARNING_TYPE="CREATE TABLE " + EarningType.TableAttr.TABLE_NAME + " (" +
            EarningType.TableAttr._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
            EarningType.TableAttr.COLUMN_TYPE_NAME + " TEXT" + "," +
            EarningType.TableAttr.COLUMN_NOTE + " TEXT"  + " )";

    //收入表
    private static final String CREATE_TABLE_EARNING="CREATE TABLE " + Earning.TableAttr.TABLE_NAME + " (" +
            Earning.TableAttr._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
            Earning.TableAttr.COLUMN_ACCOUNT_DATE + " TEXT" + "," +
            Earning.TableAttr.COLUMN_FK_TYPE + " INTEGER" + "," +
            Earning.TableAttr.COLUMN_AMOUNT + " INTEGER"  + " )";

    //删除支出类型表
    private final static String DELETE_TABLE_EXPENDITURE_TYPE = "DROP TABLE IF EXISTS " + ExpenditureType.TableAttr.TABLE_NAME;

    //删除支出表
    private final static String DELETE_TABLE_EXPENDITURE = "DROP TABLE IF EXISTS " + Expenditure.TableAttr.TABLE_NAME;

    //删除s收入类型表
    private final static String DELETE_TABLE_EARNING_TYPE = "DROP TABLE IF EXISTS " + EarningType.TableAttr.TABLE_NAME;

    //删除收入表
    private final static String DELETE_TABLE_EARNING = "DROP TABLE IF EXISTS " + Earning.TableAttr.TABLE_NAME;

    public DatabaseHelpler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    public DatabaseHelpler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }



    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(CREATE_TABLE_EXPENDITURE_TYPE);
        sqLiteDatabase.execSQL(CREATE_TABLE_EXPENDITURE);
        sqLiteDatabase.execSQL(CREATE_TABLE_EARNING_TYPE);
        sqLiteDatabase.execSQL(CREATE_TABLE_EARNING);

        //初始化
        sqLiteDatabase.execSQL(EarningType.TableAttr.SQL_Init);
        sqLiteDatabase.execSQL(ExpenditureType.TableAttr.SQL_Init);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
//当数据库升级时被调用,首先删除旧表,然后调用OnCreate()创建新表
        sqLiteDatabase.execSQL(DELETE_TABLE_EXPENDITURE);
        sqLiteDatabase.execSQL(DELETE_TABLE_EXPENDITURE_TYPE);
        sqLiteDatabase.execSQL(DELETE_TABLE_EARNING_TYPE);
        sqLiteDatabase.execSQL(DELETE_TABLE_EARNING);
        onCreate(sqLiteDatabase);

    }
}

results matching ""

    No results matching ""